package com.tledu.springboot19.controller;

import com.tledu.springboot19.entity.Student;
import com.tledu.springboot19.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.Map;

@Controller
public class HelloController {

//    /**
//     * 依赖注入 DI 、 AOP 、IOC
//     */
//    @Autowired
//    private JdbcTemplate jdbcTemplate;

    @Autowired
    private StudentService service;


    /**
     * Controller职责就是根据不同的地址做出不同的响应
     * 配置了，放到hello这个地址的时候，返回templates下的hello.html
     */
    @RequestMapping("/h")
    // 这个Model Spring boot会自动帮我们注入进来
    // 这些参数，spring 也会自动解析请求参数，放到函数的参数里
    public String hello(Model model, String name, String msg,Integer age) {
        System.out.println(name + ":" + msg);
        // 后端需要向前端传递一些数据，这个时候可以通过Model进行传递
        model.addAttribute("name", name);
        model.addAttribute("msg", msg);
        model.addAttribute("content", "<h1>这是一个富文本内容</h1>");
        model.addAttribute("age", age);
        model.addAttribute("num", 0);

        return "hello";
    }

    @RequestMapping("/student")
    public String stu(Model model,String name) {
        // 1. 引入依赖
        // 2. 配置数据库连接
        // 3. 在需要链接数据的地方注入JdbcTemplate
        // 4. 执行queryForList 查询到列表数据
        // 5. 界面上可以通过th:each进行循环渲染
        // 没有提现后端的分层结构。 标准化开发
        //  Controller ： 根据不同的请求做出不同的响应， 1. 建立地址映射关系 。2 参数的获取和封装 3. 给界面设置返回值
        //  Service ： 编写业务逻辑。 主要实现业务逻辑的地方
        //  Dao ：   和数据库进行交互
        //  entity/model/domain:  实体，（和数据库一一对应的类）
//        List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from stu");
        List<Student> list = service.list(name);
        model.addAttribute("list", list);
        return "student";
    }

}
